package lu.med.praxiswahl.wahlumed.client.arztbriefe;

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;

import lu.med.praxiswahl.wahlumed.client.utilities.UniCode;
import lu.med.praxiswahl.wahlumed.client.wclient.Main;
import lu.med.praxiswahl.wahlumed.model.beans.DoctorLettersTemplateTBL;

/**
 * 
 * @author Lars Holger Roth
 */
@SuppressWarnings("serial")
public class VorlagenEditor extends JDialog implements ActionListener
{
    private Main dataManager;
    private DefaultListModel model;
    private JList vorlagenListe;
    private JTextArea edit;
    private ArrayList<DoctorLettersTemplateTBL> data = new ArrayList<DoctorLettersTemplateTBL>();
    private ArztbriefPanel abp;

    public VorlagenEditor(Main dataManager, ArztbriefPanel abp)
    {
	super(dataManager, "Arztbriefvorlagen Editor", true);
	enableEvents(AWTEvent.MOUSE_EVENT_MASK);
	this.dataManager = dataManager;
	this.abp = abp;
	this.setLayout(new GridLayout(0, 2));
	// Das linke Panel beinhaltet die Vorlagen Liste,
	// sowie die Buttons zum Speichern, Ersetzen und L�schen
	JPanel leftPanel = new JPanel(new BorderLayout());
	leftPanel.setBorder(BorderFactory.createTitledBorder("Vorlagen"));

	JPanel buttonPanel = new JPanel(new GridLayout(0, 3));
	JButton a = new JButton("Neu");
	a.addActionListener(this);
	JButton b = new JButton("Speichern");
	b.addActionListener(this);
	JButton c = new JButton("L" + UniCode.getoe() + "schen");
	c.addActionListener(this);
	buttonPanel.add(a);
	buttonPanel.add(b);
	buttonPanel.add(c);

	JPanel rightPanel = new JPanel(new BorderLayout());
	rightPanel.setBorder(BorderFactory.createTitledBorder("Eingabefl"
		+ UniCode.getae() + "che"));
	edit = new JTextArea();
	JScrollPane sp = new JScrollPane(edit);
	rightPanel.add(sp, BorderLayout.CENTER);

	model = new DefaultListModel();
	vorlagenListe = new JList(model);
	vorlagenListe.addMouseListener(new ArztbriefMouseListener(dataManager,
		edit, this));
	vorlagenListe.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

	JScrollPane vorlagenListePane = new JScrollPane(vorlagenListe);

	leftPanel.add(vorlagenListePane, BorderLayout.CENTER);
	leftPanel.add(buttonPanel, BorderLayout.NORTH);

	this.add(leftPanel);
	this.add(rightPanel);
	refreshModel();
	this.setSize(700, 500);
	this.setLocation(100, 50);
	this.setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
	if (e.getActionCommand().equals("L" + UniCode.getoe() + "schen"))
	{
	    if (vorlagenListe.getSelectedIndex() == -1)
	    {
		JOptionPane.showMessageDialog(dataManager, "Sie m"
			+ UniCode.getue() + "ssen zuerst die Vorlage ausw"
			+ UniCode.getae() + "hlen, die Sie l" + UniCode.getoe()
			+ "schen wollen.");
		return;
	    }
	    dataManager.getArztbriefVorlageContext()
		    .deleteDoctorLetterTemplate(
			    data.get(vorlagenListe.getSelectedIndex()).getId());
	}
	if (e.getActionCommand().equals("Neu"))
	{
	    edit.setText("");
	    return;
	}
	if (e.getActionCommand().equals("Speichern"))
	{
	    // Speichert den eingegebenen Text als neue Vorlage ab
	    // Fragt nach einem Bezeichner
	    // Wandelt den Text um
	    // �bertr�gt die Daten an den Server
	    String bez = JOptionPane.showInputDialog(dataManager,
		    "Geben Sie einen eindeutigen Bezeichner f"
			    + UniCode.getue() + "r die Vorlage ein:");
	    dataManager.getArztbriefVorlageContext()
		    .createDoctorLetterTemplate(bez, "", edit.getText());
	    abp.refreshMo();
	}
	this.refreshModel();
    }

    public String getCurText(int index)
    {
	// Liefert die aktuell gewählte ID zurück bzw eine -1 falls keine
	// makiert wurde
	// int index = this.vorlagenListe.getSelectedIndex();
	if (index == -1)
	{
	    return null;
	}
	return data.get(index).getText();
    }

    public void refreshModel()
    {
	// Fragt die Liste mit Vorlagen vom Server ab
	DoctorLettersTemplateTBL[] idListe = dataManager
		.getArztbriefVorlageContext().getAllDoctorLetterTemplate();

	if (idListe == null)
	{
	    return;
	}

	data.clear();
	model.clear();

	for (int i = 0; i < idListe.length; i++)
	{
	    if (idListe[i].getTyp().equals(""))
	    {
		// F�gt dem data Modell die Daten hinzu und der Liste die
		// zugeh�rigen IDs
		data.add(idListe[i]);
		model.addElement(idListe[i].getLabel());
	    }

	}
    }

}
